Index: site/src/main/java/org/hippoecm/hst/demo/components/SolrSearch.java
===================================================================
--- site/src/main/java/org/hippoecm/hst/demo/components/SolrSearch.java	(revision 0)
+++ site/src/main/java/org/hippoecm/hst/demo/components/SolrSearch.java	(revision 0)
@@ -0,0 +1,116 @@
+/*
+ *  Copyright 2009 Hippo.
+ * 
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ * 
+ *       http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+package org.hippoecm.hst.demo.components;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.jcr.RepositoryException;
+import javax.servlet.ServletContext;
+
+import org.hippoecm.hst.content.beans.query.exceptions.QueryException;
+import org.hippoecm.hst.content.beans.solr.HstSolrQuery;
+import org.hippoecm.hst.content.beans.solr.HstSolrQueryImpl;
+import org.hippoecm.hst.content.beans.solr.HstSolrQueryResult;
+import org.hippoecm.hst.core.component.HstComponentException;
+import org.hippoecm.hst.core.component.HstRequest;
+import org.hippoecm.hst.core.component.HstResponse;
+import org.hippoecm.hst.core.request.ComponentConfiguration;
+import org.hippoecm.hst.site.HstServices;
+import org.hippoecm.hst.solr.SolrIntegration;
+import org.hippoecm.hst.solr.SolrServerNotAvailableException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class SolrSearch extends AbstractSearchComponent {
+
+    public static final Logger log = LoggerFactory.getLogger(SolrSearch.class);
+
+    @Override
+    public void init(ServletContext servletContext, ComponentConfiguration componentConfig)
+            throws HstComponentException {
+        super.init(servletContext, componentConfig);
+    }
+
+    @Override
+    public void doAction(HstRequest request, HstResponse response) throws HstComponentException {
+        String query = request.getParameter("query");
+        response.setRenderParameter("query", query);
+    }
+     
+    @Override 
+    public void doBeforeRender(HstRequest request, HstResponse response) throws HstComponentException {
+        super.doBeforeRender(request, response);  
+        
+        String query = getPublicRequestParameter(request, "query");
+        int pageSize = 15;
+        if (query == null || "".equals(query)) {
+            query = request.getParameter("query");
+        }
+        
+        int page = 1;
+        String pageStr = request.getParameter("page");
+        try {
+            page = Integer.parseInt(pageStr);
+        } catch (NumberFormatException e) {
+            // 
+        }
+        
+        if (query == null) {
+            return;
+        }
+         
+        request.setAttribute("query", query);
+        
+        SolrIntegration solrIntegration = HstServices.getComponentManager().getComponent("org.hippoecm.hst.solr.SolrIntegration");
+        
+        try {
+            HstSolrQuery solrQuery  = new HstSolrQueryImpl(request.getRequestContext().getSession(), solrIntegration.getSolrServer(), query);
+            
+            solrQuery.setLimit(pageSize);
+            solrQuery.setOffset( (page-1) * pageSize );
+            
+            HstSolrQueryResult result = solrQuery.execute();
+            request.setAttribute("result", result);
+            
+            // add pages
+            if(result.getTotalSize() > pageSize) {
+                List<Integer> pages = new ArrayList<Integer>();
+                int numberOfPages = result.getTotalSize() / pageSize ;
+                if(result.getTotalSize() % pageSize != 0) {
+                    numberOfPages++;
+                }
+                for(int i = 0; i < numberOfPages; i++) {
+                    pages.add(i + 1);
+                }
+                request.setAttribute("pages", pages);
+            }
+            
+        } catch (RepositoryException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        } catch (QueryException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        } catch (SolrServerNotAvailableException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        }
+        
+    }
+
+
+}
Index: site/src/main/java/org/hippoecm/hst/demo/beans/solr/AgendaSolrBean.java
===================================================================
--- site/src/main/java/org/hippoecm/hst/demo/beans/solr/AgendaSolrBean.java	(revision 0)
+++ site/src/main/java/org/hippoecm/hst/demo/beans/solr/AgendaSolrBean.java	(revision 0)
@@ -0,0 +1,70 @@
+package org.hippoecm.hst.demo.beans.solr;
+
+import java.util.Calendar;
+import java.util.List;
+
+import org.hippoecm.hst.content.beans.HstBean;
+import org.hippoecm.hst.content.beans.index.IndexField;
+
+
+public class AgendaSolrBean implements HstBean {
+    @IndexField
+    private String id;
+    
+    @IndexField
+    private String name;
+
+    @IndexField
+    private String text = "Lorem ipsum agenda doc";
+    
+    @IndexField(name="cat")
+    private String[] categories;
+
+    @IndexField
+    private List<String> features;
+
+    @IndexField 
+    private Calendar date;
+
+    public String getCanonicalUUID() {
+        return id;
+    }
+
+    public void setCanonicalUUID(String id) {
+        this.id = id;
+    }
+    
+    public String getName() {
+        return name;
+    }
+    
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String[] getCategories() {
+        return categories;
+    }
+
+    public void setCategories(String[] categories) {
+        this.categories = categories;
+    }
+
+    public List<String> getFeatures() {
+        return features;
+    }
+
+    public void setFeatures(List<String> features) {
+        this.features = features;
+    }
+
+    public Calendar getDate() {
+        return date;
+    }
+
+    public void setDate(Calendar date) {
+        this.date = date;
+    }
+
+    
+}
Index: site/src/main/java/org/hippoecm/hst/demo/beans/solr/TextSolrBean.java
===================================================================
--- site/src/main/java/org/hippoecm/hst/demo/beans/solr/TextSolrBean.java	(revision 0)
+++ site/src/main/java/org/hippoecm/hst/demo/beans/solr/TextSolrBean.java	(revision 0)
@@ -0,0 +1,57 @@
+package org.hippoecm.hst.demo.beans.solr;
+
+import java.util.List;
+
+import org.hippoecm.hst.content.beans.HstBean;
+import org.hippoecm.hst.content.beans.index.IndexField;
+
+public class TextSolrBean implements HstBean {
+  
+    @IndexField
+    private String id;
+
+    @IndexField
+    private String name;
+    
+    @IndexField
+    private String text = "Lorem ipsum text doc";
+    
+    @IndexField(name="cat")
+    private String[] categories;
+
+    @IndexField
+    private List<String> features;
+
+    public String getCanonicalUUID() {
+        return id;
+    }
+
+    public void setCanonicalUUID(String id) {
+        this.id = id;
+    }
+    
+    public String getName() {
+        return name;
+    }
+    
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String[] getCategories() {
+        return categories;
+    }
+
+    public void setCategories(String[] categories) {
+        this.categories = categories;
+    }
+
+    public List<String> getFeatures() {
+        return features;
+    }
+
+    public void setFeatures(List<String> features) {
+        this.features = features;
+    }
+
+}
Index: site/src/main/java/org/hippoecm/hst/demo/beans/BaseBean.java
===================================================================
--- site/src/main/java/org/hippoecm/hst/demo/beans/BaseBean.java	(revision 29897)
+++ site/src/main/java/org/hippoecm/hst/demo/beans/BaseBean.java	(working copy)
@@ -22,6 +22,7 @@
 import org.hippoecm.hst.content.beans.ContentNodeBinder;
 import org.hippoecm.hst.content.beans.ContentNodeBindingException;
 import org.hippoecm.hst.content.beans.Node;
+import org.hippoecm.hst.content.beans.index.IndexField;
 import org.hippoecm.hst.content.beans.standard.HippoDocument;
 import org.hippoecm.hst.content.beans.standard.HippoGalleryImageSetBean;
 import org.hippoecm.hst.content.beans.standard.HippoHtml;
@@ -38,7 +39,7 @@
     private String html;
     
     protected final static String HTML_NODEPATH = "demosite:body";
-    
+    @IndexField
     public String getTitle() {
         return title == null ? (String)getProperty("demosite:title"): title ;
     }
@@ -47,7 +48,7 @@
         this.title = title;
     }
     
-   
+    @IndexField
     public String getSummary() {
         return summary == null ? (String)getProperty("demosite:summary"): summary ;
     }
Index: site/src/main/java/org/hippoecm/hst/demo/beans/NewsBean.java
===================================================================
--- site/src/main/java/org/hippoecm/hst/demo/beans/NewsBean.java	(revision 29897)
+++ site/src/main/java/org/hippoecm/hst/demo/beans/NewsBean.java	(working copy)
@@ -18,6 +18,7 @@
 import java.util.Calendar;
 
 import org.hippoecm.hst.content.beans.Node;
+import org.hippoecm.hst.content.beans.index.IndexField;
 import org.hippoecm.hst.content.beans.standard.HippoGalleryImageSetBean;
 
 @Node(jcrType="demosite:newsdocument")
@@ -27,8 +28,8 @@
     private boolean imagesLoaded = false;
     
     @Override
+    @IndexField
     public Calendar getDate() {
-        
         return getProperty("demosite:date");
     }
 
Index: site/src/main/java/org/hippoecm/hst/demo/beans/ProductBean.java
===================================================================
--- site/src/main/java/org/hippoecm/hst/demo/beans/ProductBean.java	(revision 29897)
+++ site/src/main/java/org/hippoecm/hst/demo/beans/ProductBean.java	(working copy)
@@ -15,7 +15,10 @@
  */
 package org.hippoecm.hst.demo.beans;
 
+import java.util.Calendar;
+
 import org.hippoecm.hst.content.beans.Node;
+import org.hippoecm.hst.content.beans.index.IndexField;
 import org.hippoecm.hst.content.beans.standard.HippoGalleryImageSetBean;
 
 @Node(jcrType="demosite:productdocument")
@@ -24,31 +27,38 @@
     private HippoGalleryImageSetBean imageBean;
     private boolean imagesLoaded = false;
     
+    @IndexField
     public String getTitle() {
         // product does not have a title
         return this.getLocalizedName();
     }
-    
+    @IndexField
     public String getBrand(){
         return this.getProperty("demosite:brand");
     }
-    
+    @IndexField
     public String getProduct(){
         return this.getProperty("demosite:product");
     }
-    
+    @IndexField
     public String getColor(){
         return this.getProperty("demosite:color");
     }
-    
+    @IndexField
     public String getType(){
         return this.getProperty("demosite:type");
     }
-    
+    @IndexField
     public Double getPrice(){
         return this.getProperty("demosite:price");
     }
     
+    @IndexField
+    Calendar constructionDate;
+    public Calendar getConstructionDate() {
+        return getProperty("demosite:constructiondate");
+    }
+    
     public String[] getTags(){
         return this.getProperty("hippostd:tags");
     }
Index: site/src/main/resources/META-INF/hst-assembly/overrides/hippobean-solr-indexer.xml
===================================================================
--- site/src/main/resources/META-INF/hst-assembly/overrides/hippobean-solr-indexer.xml	(revision 0)
+++ site/src/main/resources/META-INF/hst-assembly/overrides/hippobean-solr-indexer.xml	(revision 0)
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Copyright 2008 Hippo
+
+  Licensed under the Apache License, Version 2.0 (the  "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS"
+  BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+<beans xmlns="http://www.springframework.org/schema/beans" 
+       xmlns:lang="http://www.springframework.org/schema/lang" 
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xmlns:util="http://www.springframework.org/schema/util"
+       xmlns:aop="http://www.springframework.org/schema/aop"
+       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
+                           http://www.springframework.org/schema/lang http://www.springframework.org/schema/beans/spring-lang-3.0.xsd
+                           http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.0.xsd
+                           http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">
+
+
+   <import resource="classpath:/org/hippoecm/hst/solr/SpringComponentManager-solr.xml" />
+    
+</beans>
+
Index: site/src/main/webapp/WEB-INF/jsp/components/main/solr_search.jsp
===================================================================
--- site/src/main/webapp/WEB-INF/jsp/components/main/solr_search.jsp	(revision 0)
+++ site/src/main/webapp/WEB-INF/jsp/components/main/solr_search.jsp	(revision 0)
@@ -0,0 +1,77 @@
+<%--
+  Copyright 2009 Hippo
+
+  Licensed under the Apache License, Version 2.0 (the  "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS"
+  BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License. 
+--%>
+<%@ page language="java" %>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/xml" prefix="x" %>
+<%@ taglib uri="http://www.hippoecm.org/jsp/hst/core" prefix='hst'%>
+<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
+
+<div id="yui-u">
+   
+    <hst:link var="searchURL" path="/solrsearch" />
+    <form action="${searchURL}" method="get">
+      <div>
+        <input type="text" name="query" value="${query}"/>
+        <input type="submit" value="Search"/>
+      </div>
+    </form>
+    
+    <c:if test="${query != null && query != ''}">
+        
+          Results <b>${result.size}</b> for <b>${query}</b>.
+          
+          <c:forEach var="bean" items="${result.hstBeans}" varStatus="indexer">
+              <hst:link var="link" hippobean="${bean}"/>
+              <ul class="list-overview">
+                  <li class="title">
+                  <a href="${link}">
+                  <c:choose>
+                    <c:when test="${hst:isReadable(bean, 'title')}">
+                      ${bean.title} 
+                    </c:when>
+                    <c:otherwise>
+                     ${bean.name}
+                    </c:otherwise>
+                   </c:choose>
+                   </a>
+                  </li>
+              </ul>
+          </c:forEach>
+           
+    </c:if>
+    
+    <c:if test="${fn:length(pages) gt 0}">
+      <ul id="paging-nav">
+        <c:forEach var="page" items="${pages}">
+          <c:set var="active" value="" />
+          <c:choose>
+            <c:when test="${crPage == page}">
+               <li>${page}</li>
+            </c:when>
+            <c:otherwise>
+              <hst:renderURL var="pagelink">
+                <hst:param name="page" value="${page}" />
+                <hst:param name="query" value="${query}" />
+              </hst:renderURL>
+              <li><a href="${pagelink}" title="${page}">${page}</a></li>
+            </c:otherwise>
+          </c:choose>
+        </c:forEach>
+      </ul>
+    </c:if>
+
+</div>
Index: site/src/main/webapp/WEB-INF/jsp/components/main/facetedaddproduct.jsp
===================================================================
--- site/src/main/webapp/WEB-INF/jsp/components/main/facetedaddproduct.jsp	(revision 29897)
+++ site/src/main/webapp/WEB-INF/jsp/components/main/facetedaddproduct.jsp	(working copy)
@@ -43,4 +43,21 @@
         <input type="hidden" name="number" value="250"/>
         <input type="submit" value="Add 250 more random cars"/>
     </form>
+    <form action="<hst:actionURL/>" method="get">
+        <input type="hidden" name="number" value="250"/>
+        <input type="submit" value="Add 250 more random cars"/>
+    </form>
+    <form action="<hst:actionURL/>" method="get">
+        <input type="hidden" name="number" value="1000"/>
+        <input type="submit" value="Add 1000 more random cars"/>
+    </form>
+    <form action="<hst:actionURL/>" method="get">
+        <input type="hidden" name="number" value="10000"/>
+        <input type="submit" value="Add 10000 more random cars"/>
+    </form>
+    
+    <form action="<hst:actionURL/>" method="get">
+        <input type="hidden" name="number" value="30000"/>
+        <input type="submit" value="Add 30000 more random cars"/>
+    </form>
 </div>
Index: site/pom.xml
===================================================================
--- site/pom.xml	(revision 29897)
+++ site/pom.xml	(working copy)
@@ -36,6 +36,13 @@
       <scope>runtime</scope>
     </dependency>
 
+
+    <dependency>
+        <groupId>org.onehippo.cms7.hst.client-modules</groupId>
+        <artifactId>hst-solr</artifactId>
+        <version>${hippo.hst.version}</version>
+    </dependency>
+      
     <dependency>
       <groupId>org.onehippo.cms7.hst.dependencies</groupId>
       <artifactId>hst-server-dependencies</artifactId>
@@ -160,4 +167,4 @@
     </resources>
   </build>
 
-</project>
+</project>
\ No newline at end of file
Index: content/src/main/resources/hstconfiguration/demosite/sitemenus.xml
===================================================================
--- content/src/main/resources/hstconfiguration/demosite/sitemenus.xml	(revision 29897)
+++ content/src/main/resources/hstconfiguration/demosite/sitemenus.xml	(working copy)
@@ -111,6 +111,14 @@
                 <sv:value>search</sv:value>
             </sv:property>
         </sv:node>
+        <sv:node sv:name="Solr Search">
+            <sv:property sv:name="jcr:primaryType" sv:type="Name">
+                <sv:value>hst:sitemenuitem</sv:value>
+            </sv:property>
+            <sv:property sv:name="hst:referencesitemapitem" sv:type="String">
+                <sv:value>solrsearch</sv:value>
+            </sv:property>
+        </sv:node>
         <sv:node sv:name="Form Component Example">
             <sv:property sv:name="jcr:primaryType" sv:type="Name">
                 <sv:value>hst:sitemenuitem</sv:value>
Index: content/src/main/resources/hstconfiguration/demosite/sitemap.xml
===================================================================
--- content/src/main/resources/hstconfiguration/demosite/sitemap.xml	(revision 29897)
+++ content/src/main/resources/hstconfiguration/demosite/sitemap.xml	(working copy)
@@ -246,7 +246,15 @@
             <sv:value>hst:pages/searchpage</sv:value>
         </sv:property>
     </sv:node>
-   
+   <sv:node sv:name="solrsearch">
+        <sv:property sv:name="jcr:primaryType" sv:type="Name">
+            <sv:value>hst:sitemapitem</sv:value>
+        </sv:property>
+        <sv:property sv:name="hst:componentconfigurationid" sv:type="String">
+            <sv:value>hst:pages/solrsearchpage</sv:value>
+        </sv:property>
+    </sv:node>
+    
     <sv:node sv:name="error">
         <sv:property sv:name="jcr:primaryType" sv:type="Name">
             <sv:value>hst:sitemapitem</sv:value>
Index: content/src/main/resources/hstconfiguration/democommon/pages.xml
===================================================================
--- content/src/main/resources/hstconfiguration/democommon/pages.xml	(revision 29897)
+++ content/src/main/resources/hstconfiguration/democommon/pages.xml	(working copy)
@@ -117,6 +117,22 @@
 			</sv:property>
 		</sv:node>
 	</sv:node>
+	<sv:node sv:name="solrsearchpage">
+        <sv:property sv:name="jcr:primaryType" sv:type="Name">
+            <sv:value>hst:component</sv:value>
+        </sv:property>
+        <sv:property sv:name="hst:referencecomponent" sv:type="String">
+            <sv:value>hst:pages/standard</sv:value>
+        </sv:property>
+        <sv:node sv:name="body">
+            <sv:property sv:name="jcr:primaryType" sv:type="Name">
+                <sv:value>hst:component</sv:value>
+            </sv:property>
+            <sv:property sv:name="hst:referencecomponent" sv:type="String">
+                <sv:value>hst:components/bodysolrsearch</sv:value>
+            </sv:property>
+        </sv:node>
+    </sv:node>
 	<sv:node sv:name="faceted">
         <sv:property sv:name="jcr:primaryType" sv:type="Name">
             <sv:value>hst:component</sv:value>
Index: content/src/main/resources/hstconfiguration/democommon/components.xml
===================================================================
--- content/src/main/resources/hstconfiguration/democommon/components.xml	(revision 29897)
+++ content/src/main/resources/hstconfiguration/democommon/components.xml	(working copy)
@@ -192,6 +192,25 @@
 			</sv:property>
 		</sv:node>
 	</sv:node>
+	<sv:node sv:name="bodysolrsearch">
+        <sv:property sv:name="jcr:primaryType" sv:type="Name">
+            <sv:value>hst:component</sv:value>
+        </sv:property>
+        <sv:property sv:name="hst:referencecomponent" sv:type="String">
+            <sv:value>hst:components/general_threecolumnlayout</sv:value>
+        </sv:property>
+        <sv:node sv:name="content">
+            <sv:property sv:name="jcr:primaryType" sv:type="Name">
+                <sv:value>hst:component</sv:value>
+            </sv:property>
+            <sv:property sv:name="hst:componentclassname" sv:type="String">
+                <sv:value>org.hippoecm.hst.demo.components.SolrSearch</sv:value>
+            </sv:property>
+            <sv:property sv:name="hst:template" sv:type="String">
+                <sv:value>solrsearchresults</sv:value>
+            </sv:property>
+        </sv:node>
+    </sv:node>
     <sv:node sv:name="bodyfacetedaddproduct">
         <sv:property sv:name="jcr:primaryType" sv:type="Name">
             <sv:value>hst:component</sv:value>
Index: content/src/main/resources/hstconfiguration/democommon/templates.xml
===================================================================
--- content/src/main/resources/hstconfiguration/democommon/templates.xml	(revision 29897)
+++ content/src/main/resources/hstconfiguration/democommon/templates.xml	(working copy)
@@ -167,6 +167,15 @@
 			<sv:value>jsp/components/main/search.jsp</sv:value>
 		</sv:property>
 	</sv:node>
+	<sv:node sv:name="solrsearchresults">
+        <sv:property sv:name="jcr:primaryType" sv:type="Name">
+            <sv:value>hst:template</sv:value>
+        </sv:property>
+        <sv:property sv:name="hst:containers" sv:type="String"/>
+        <sv:property sv:name="hst:renderpath" sv:type="String">
+            <sv:value>jsp/components/main/solr_search.jsp</sv:value>
+        </sv:property>
+    </sv:node>
     <sv:node sv:name="todolist">
         <sv:property sv:name="jcr:primaryType" sv:type="Name">
             <sv:value>hst:template</sv:value>
